package com.yanbao.service;

import com.free.common.vo.ResultModel;
import com.free.exception.SystemException;
import com.free.files.FileManagers;
import com.free.utils.DateUtils;
import com.yanbao.properties.ConstantsProperties;
import com.yanbao.vo.ImgConstants;
import com.yanbao.vo.ImgVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * <p>
 * 功能概述:
 * </p>
 * <p>
 * 功能详述:
 * </p>
 */
@Service
public class FileSaveService {
    /*========================================================================*
     *                         Public Fields (公共属性)
     *========================================================================*/

    /*========================================================================*
     *                         Private Fields (私有属性)
     *========================================================================*/

    @Autowired
    private ConstantsProperties properties;
    /*========================================================================*
     *                         Construct Methods (构造方法)
     *========================================================================*/

    /*========================================================================*
     *                         Public Methods (公有方法)
     *========================================================================*/

    public List<ImgVo> getImgList(int type){
        List<ImgVo> imgs = new ArrayList<>();
        if(type == 1){
           return new ArrayList(ImgConstants.PCIMGS.values());
        }else{
            return new ArrayList(ImgConstants.MBIMGS.values());
        }
    }

    public ResultModel uploadFile(byte[] content, String name, Integer type, Integer idx) throws SystemException {
        ImgVo imgInfo;
        if(type == 1){
            imgInfo = ImgConstants.PCIMGS.get(name);
        }else{
            imgInfo = ImgConstants.MBIMGS.get(name);
        }
        String fileNm = imgInfo.getFileNms()[idx];
        String[] arr = StringUtils.split(fileNm, ".");
        String bakFileNm = mkBakFileNm(arr[0], arr[1]);
        ResultModel res = bakFile(type, fileNm, bakFileNm);
        if(res.isSuccess()){
            return FileManagers.getFiler().upload(content, pathFileNm(type, fileNm));
        }
        return res;
    }

    private ResultModel bakFile(int type, String fileNm, String bakFileNm) throws SystemException {
       String localPath = pathFileNm(type,fileNm);
       String serverPath = pathFileNm(type,bakFileNm);
       return FileManagers.getFiler().upload(localPath,serverPath);
    }

    private String pathFileNm(int type, String fileNm){
        String serverPath = type == 1?properties.getPcimgpath():properties.getMbimgpath();
        return StringUtils.join(new String[]{serverPath,fileNm},"//");
    }

    private String mkBakFileNm(String name, String ext){
        StringBuffer strbuf = new StringBuffer();
        strbuf.append(name);
        strbuf.append("_");
        strbuf.append(DateUtils.now(DateUtils.FormatEnum.yyyyMMddHHmmssSSS));
        strbuf.append(".");
        strbuf.append(ext);
        return strbuf.toString();

    }

    public static void main(String[] args) {
        String serverPath = "C://item";
        String fileNm = "t.jpg";
        String fileNm2 = StringUtils.join(new String[]{serverPath,fileNm},"//");
        System.out.println(fileNm2);
    }

    /*========================================================================*
     *                         Private Methods (私有方法)
     *========================================================================*/
}
